package com.yzt.zhuju.IService.call;

import android.app.NotificationChannel;
import android.content.Context;

import androidx.fragment.app.FragmentActivity;

import com.alibaba.android.arouter.facade.template.IProvider;
import com.yzt.zhuju.network.entity.call.AgoraCallMsg;
import com.yzt.zhuju.network.entity.user.BasicUserInfoResponse;
import com.yzt.zhuju.network.entity.user.PersonalDetail;

/**
 * @author matthewzhao
 * created on: 2022/8/1 15:29
 * description: 打电话相关Service
 */
public interface ICallService extends IProvider {

    void preInitCall(Context context);

    /**
     * 初始化操作
     */
    void initCall();

    /**
     * 获取当前通话状态
     *
     * @return
     */
    @CallConstants.CallState
    int getCurrentCallState();

    void startSincereShowTime(String content);

    /**
     * 拨打语音
     *
     * @param activity
     * @param userId
     */
    void callVoice(FragmentActivity activity, String userId);

    /**
     * 拨打语音
     *
     * @param activity
     * @param userId
     */
    void callVoice(FragmentActivity activity, String userId, String soure_type);

    /**
     * 拨打语音
     *
     * @param activity
     * @param personal
     */
    void callVoice(FragmentActivity activity, BasicUserInfoResponse personal);

    /**
     * 拨打视频
     *
     * @param activity
     * @param userId
     */
    void callVideo(FragmentActivity activity, String userId);

    /**
     * 拨打视频
     *
     * @param activity
     * @param personal
     */
    void callVideo(FragmentActivity activity, BasicUserInfoResponse personal);

    /**
     * 直接拨打视频
     *
     * @param activity
     * @param personal
     */
    void callVideoDirect(FragmentActivity activity, BasicUserInfoResponse personal);

    /**
     * 回拨电话
     *
     * @param type   电话类型
     * @param userId 拨打对方uid
     */
    void replayCall(@CallConstants.CallType int type, String userId);

    /**
     * 邀请拨打音视频
     *
     * @param activity
     * @param userId
     */
    void inviteCall(FragmentActivity activity, String userId);

    /**
     * 邀请拨打音视频
     *
     * @param activity
     * @param personal
     */
    void inviteCall(FragmentActivity activity, BasicUserInfoResponse personal);

    /**
     * 跳转至音视频接听页面
     *
     * @param callMsg        通话信息
     * @param personalDetail 用户信息
     * @param fromNotice     是否来自通知栏点击接听按钮，如果是则自动接听
     */
    void goToAcceptCallPage(AgoraCallMsg callMsg, PersonalDetail personalDetail, boolean fromNotice);

    /**
     * 挂断电话，仅更新本地状态，不调用后台接口
     */
    void hangUp();

    /**
     * 获取通话结算信息
     */
    void callSettlementInfo();

    /**
     * 上传通话日志
     *
     * @param type 1、声网 2、云信
     */
    void uploadCallLog(int type);

    /**
     * 拉取通话的通知栏
     */
    void loadCallNotice(AgoraCallMsg agoraCallMsg, PersonalDetail personalDetail, boolean isAgora);

    /**
     * 播放音视频通话铃声
     */
    void playChatCallRing();

    /**
     * 关闭音视频通话铃声
     */
    void stopChatCallRing();

    /**
     * 取消通话的通知栏
     */
    void dismissCallNotice();

    /**
     * 加入直播间
     */
    void joinLiveRoom(String roomId);

    /**
     * 加载主播直播间接听到视频通话
     */
    void showLiveCallDialog(AgoraCallMsg agoraCallMsg, PersonalDetail userInfo);

    /**
     * 隐藏主播直播间接听到视频通话
     */
    void dismissLiveCallDialog();

    /**
     * 获取来电通知的channelId
     *
     * @return
     */
    String getCallComingNotificationChannelId();

    /**
     * 创建通知channel
     *
     * @return
     */
    NotificationChannel createChatCallNotificationChannel();
}
